#!/usr/bin/env python

#serpent_id #state_id

#incluindo bibliotecas
import sys
import numpy as np
import matplotlib.pyplot as plt


def qtd(lista,el):
	cont = 0
	for i in lista:
		if i == el:
			cont += 1
	return cont

N = ["AC","AP","AM","MA","RO","RR","TO","PA"]
NE = ["AL","BA","CE","PB","PE","PI","RN","SE"]
SE = ["ES","MG","SP","RJ"]
S = ["PR","SC","RS"]
C = ["DF","GO","MS","MT",]

Nid = [1,3,4,10,22,23,27,14]
NEid = [2,5,6,15,17,18,20,26]
SEid = [8,13,25,19]
Sid = [16,24,21]
Cid = [7,9,12,11]

f = open(sys.argv[1],"r")

lista = []
for line in f:
	lista.append(int(line.split()[1]))

estados = [qtd(lista,1),qtd(lista,3),qtd(lista,4),qtd(lista,10),qtd(lista,22),qtd(lista,23),qtd(lista,27),qtd(lista,14),qtd(lista,2),qtd(lista,5),qtd(lista,6),qtd(lista,15),qtd(lista,17),qtd(lista,18),qtd(lista,20),qtd(lista,26),qtd(lista,8),qtd(lista,13),qtd(lista,25),qtd(lista,19),qtd(lista,16),qtd(lista,24),qtd(lista,21),qtd(lista,7),qtd(lista,9),qtd(lista,12),qtd(lista,11)]
	


#Organizamos as entradas passadas como parametro em variaveis
xnome = "Estado"
ynome = "Quantidade de cobras encontradas"
data = estados

SIGLAS = N + NE + SE + S + C

#Convertendo a lista data (que contem strings, para inteiros)
#aux = []
#for i in data:
#	aux.append(int(i))
#data = aux

#Achamos o valor maximo, que correspondera a maior barra do grafico e somamos 5% para que o grafico nao corte a parte superior da maior barra
maximo = max(data)
maximo = maximo + 0.05 * maximo


##Geramos um array contendo os numeros de 0 ateh 5*(N-1) (ou seja, em intervalos de 5 iniciando em 0) ja que a largura de cada barra tem tamanho 5
#Largura da barra = 5
width = 5      
N = len(data)
ind = np.arange(N)
ind = ind * 5


#Funcao responsavel por plotar o grafico (eixos) com determinado padrao de largura e altura (111)
fig = plt.figure()
ax = fig.add_subplot(111)

#Plotamos agora o grafico em si (as barras)
barras = ax.bar(ind, data, width, color='r', yerr=0,facecolor='blue')

#Titulando os eixos
ax.set_ylabel(ynome)
ax.set_xlabel(xnome)


#Estabelecendo os limites de cada eixo
ax.set_ybound(lower=None,upper=maximo)
ax.set_xbound(lower=None,upper=N*width)

#Adicionando titulo ao grafico
titulo = "Grafico "
titulo = titulo + ynome + ' X ' + xnome
ax.set_title(titulo)

#Adicionando valores aos eixos
ax.set_xticks(ind+2.5)
ax.set_xticklabels( (SIGLAS[0],SIGLAS[1],SIGLAS[2],SIGLAS[3],SIGLAS[4],SIGLAS[5],SIGLAS[6],SIGLAS[7],SIGLAS[8],SIGLAS[9],SIGLAS[10],SIGLAS[11],SIGLAS[12],SIGLAS[13],SIGLAS[14],SIGLAS[15],SIGLAS[16],SIGLAS[17],SIGLAS[18],SIGLAS[19],SIGLAS[20],SIGLAS[21],SIGLAS[22],SIGLAS[23],SIGLAS[24],SIGLAS[25]),SIGLAS[26])

ax.grid()

#Easter Egg
fig.text(0, 0, 'MC536 - Banco de Dados',
         fontsize=50, color='gray',
         ha='left', va='bottom', alpha=0.5)

#Funcao que coloca os valores de cada barra em cima da mesma
def autolabel(rects):
    for rect in rects:
        height = rect.get_height()
        ax.text(rect.get_x()+rect.get_width()/2., 1.02*height, '%d'%int(height),
                ha='center', va='bottom')

#Chamando autolabel
autolabel(barras)

#Esta funcao mostra o grafico gerado na tela
plt.show()

